/* This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package Modelo;

import java.io.File;
import java.util.*;

import Controlador.BuscadorDeFicheros;
import Controlador.BuscadorDeLogs;

/**
 * Clase que representa una tecnica de busqueda de cadenas en los logs
 * @author Armando Machuca Llorente
 */
public class TecnicaLog extends Tecnica {
	
    /**
     * Constructor de la clase TecnicaLog
     * @param tipo Tipo de tecnica:instalado o desinstalado
     * @param plugin Referencia al plugin que contiene la tecnica
     */
	public TecnicaLog(String tipo,Plugin plugin){
		_param=new Vector<Parametro>();
		_tipo=tipo;
		_plugin=plugin;
	}
	
    /**
     * Metodo que permite ejecutar la tecnica
     * @param unidad Unidad sobre la que se realizara el analisis
     */
	public void ejecutar(String unidad){
		_resultados=new Vector();		
		if(getValue("tipo").compareTo("blog")==0){
			bLogConcreto(unidad);
		}
	}
	
	
	private void bLogConcreto(String unidad){		
		if(BuscadorDeLogs.fileMatch(unidad.concat(getValue("fichero")),getValue("cadena"))){
			_resultados.add(new Parametro("fichero",getValue("fichero")));
			_resultados.add(new Parametro("cadena",getValue("cadena")));
			_resultados.add(new Parametro("encontrado","true"));
		}
	}
	
    /**
     * Metodo que permite buscar cadenas en los logs de todo el disco
     * @param unidad Unidad a la que pertenece la tecnica
     * @param tec Conjunto de Tecnicas que continenen busquedas de este tipo
     */
	public void bArchivoTodoDisco(String unidad,Vector tec){
		LinkedList<File> ficheros = new LinkedList<File>();
		BuscadorDeLogs.dameMultiplesFicheros(unidad, getValue("cadena"), ficheros, true,tec);	
		 Iterator i = tec.iterator();
		while (i.hasNext()){
			Tecnica t=(Tecnica)i.next();
			//t.printResults();
				if(!t._resultados.isEmpty())
				t._resultados.add(new Parametro("encontrado","true"));
			}
	}
	
	
}
